package com.java.jvm.demo.chapter03;

/**
 * @author wangning
 * @create 2021-11-08 20:08
 * 逃逸分析
 * 如何快速的判断是否发生了逃逸，看new的对象是否有可能在方法外部被调用
 */
public class EscapeAnalysis {
	public EscapeAnalysis obj;

	/**
	 * 方法返回EscapeAnalysis对象，发生逃逸
	 */
	public EscapeAnalysis getInstance() {
		return obj == null ? new EscapeAnalysis() : obj;
	}

	/**
	 * 为成员属性赋值，发生逃逸
	 */
	public void setObj() {
		this.obj = new EscapeAnalysis();
	}

	/**
	 * 对象的作用域仅在当前方法内有效，没有发生逃逸
	 */
	public void useEscapeAnalysis() {
		final EscapeAnalysis escapeAnalysis = new EscapeAnalysis();

	}

	/**
	 * 引用成员变量的值，发生逃逸
	 */
	public void useEscapeAnalysis1() {
		final EscapeAnalysis instance = getInstance();

	}

}
